package com.coder.rental.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.coder.rental.entity.Dept;
import com.coder.rental.mapper.DeptMapper;
import com.coder.rental.service.IDeptService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.coder.rental.utils.DeptUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author tuboyuan
 * @since 2025-09-04
 */
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {

    /**
     * 查询部门列表并构建树形结构
     * @param dept 查询条件对象，用于模糊匹配部门名称
     * @return 返回按排序号升序排列并构建好的部门树形列表
     */
    @Override
    public List<Dept> selectList(Dept dept) {
        // 构造查询条件
        QueryWrapper queryWrapper = new QueryWrapper();
        // 根据部门名称进行模糊查询
        queryWrapper.like(StrUtil.isNotEmpty(dept.getDeptName()),"dept_name",dept.getDeptName());
        // 按照排序号升序排列
        queryWrapper.orderByAsc("order_num");
        // 执行查询获取部门列表
        List<Dept> deptList = baseMapper.selectList(queryWrapper);
        // 构建部门树形结构并返回
        return DeptUtils.buildTree(deptList,0);
    }

    /**
     * 查询部门树形结构数据
     *
     * @return List<Dept> 部门树形结构列表，包含所有部门信息并构建成树形结构
     */
    @Override
    public List<Dept> selectTree() {
        // 构造查询条件，按排序字段升序排列
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.orderByAsc("order_num");
        List<Dept> deptList = baseMapper.selectList(queryWrapper);

        // 添加根节点"所有部门"，用于构建完整的树形结构
        Dept dept = new Dept();
        dept.setDeptName("所有部门").setId(0).setPid(-1);
        deptList.add(dept);

        // 构建并返回部门树形结构
        return DeptUtils.buildTree(deptList,-1);
    }

    @Override
    public boolean hasChildren(Integer id) {
        QueryWrapper<Dept> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("pid", id);
        return baseMapper.selectCount(queryWrapper) > 0;
    }
}
